1 /*
2 
3 Boost Software License - Version 1.0 - August 17th, 2003
4 
5 Permission is hereby granted, free of charge, to any person or organization
6 obtaining a copy of the software and accompanying documentation covered by
7 this license (the "Software") to use, reproduce, display, distribute,
8 execute, and transmit the Software, and to prepare derivative works of the
9 Software, and to permit third-parties to whom the Software is furnished to
10 do so, all subject to the following:
11 
12 The copyright notices in the Software and this entire statement, including
13 the above license grant, this restriction and the following disclaimer,
14 must be included in all copies of the Software, in whole or in part, and
15 all derivative works of the Software, unless such copies or derivative
16 works are solely in the form of machine-executable object code generated by
17 a source language processor.
18 
19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22 SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23 FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25 DEALINGS IN THE SOFTWARE.
26 
27 */ 
28 
29 module derelict.glib.gmain;
30 
31 import derelict.glib.gtypes;
32 import derelict.glib.glibconfig;
33 import derelict.glib.gslist;
34 import derelict.glib.gpoll;
35 import derelict.glib.gthread;
36 import core.sys.posix.poll;
37 import core.stdc.config;
38 
39 extern (C):
40 
41 alias _GMainContext GMainContext;
42 alias _GMainLoop GMainLoop;
43 alias _GSource GSource;
44 alias _GSourcePrivate GSourcePrivate;
45 alias _GSourceCallbackFuncs GSourceCallbackFuncs;
46 alias _GSourceFuncs GSourceFuncs;
47 alias int function (void*) GSourceFunc;
48 alias void function (int, int, void*) GChildWatchFunc;
49 alias void function () GSourceDummyMarshal;
50 
51 version(Derelict_Link_Static)
52 {
53     //extern( C ) __gshared 
54     //{
55     //    GSourceFuncs g_timeout_funcs;
56     //    GSourceFuncs g_child_watch_funcs;
57     //    GSourceFuncs g_idle_funcs;
58     //}
59 }
60 else
61 {
62     extern( C ) nothrow 
63     {
64         alias da_g_timeout_funcs = GSourceFuncs;
65         alias da_g_child_watch_funcs = GSourceFuncs;
66         alias da_g_idle_funcs = GSourceFuncs;
67     }
68 
69     __gshared
70     {
71         da_g_timeout_funcs g_timeout_funcs;
72         da_g_child_watch_funcs g_child_watch_funcs;
73         da_g_idle_funcs g_idle_funcs;
74     }
75 }
76 
77 
78 struct _GSource
79 {
80 	gpointer callback_data;
81 	GSourceCallbackFuncs* callback_funcs;
82 	GSourceFuncs* source_funcs;
83 	guint ref_count;
84 	GMainContext* context;
85 	gint priority;
86 	guint flags;
87 	guint source_id;
88 	GSList* poll_fds;
89 	GSource* prev;
90 	GSource* next;
91 	char* name;
92 	GSourcePrivate* priv;
93 }
94 
95 struct _GSourceCallbackFuncs
96 {
97 	void function (gpointer) ref_;
98 	void function (gpointer) unref;
99 	void function (gpointer, GSource*, GSourceFunc*, gpointer*) get;
100 }
101 
102 struct _GSourceFuncs
103 {
104 	gboolean function (GSource*, gint*) prepare;
105 	gboolean function (GSource*) check;
106 	gboolean function (GSource*, GSourceFunc, gpointer) dispatch;
107 	void function (GSource*) finalize;
108 	GSourceFunc closure_callback;
109 	GSourceDummyMarshal closure_marshal;
110 }
111 
112 struct _GSourcePrivate;
113 
114 
115 struct _GMainLoop;
116 
117 
118 struct _GMainContext;
119 
120 
121 version(Derelict_Link_Static)
122 {
123     extern( C ) nothrow 
124     {
125         GMainContext* g_main_context_new();
126         GMainContext* g_main_context_ref(GMainContext* context);
127         void g_main_context_unref(GMainContext* context);
128         GMainContext* g_main_context_default();
129         gboolean g_main_context_iteration(GMainContext* context, gboolean may_block);
130         gboolean g_main_context_pending(GMainContext* context);
131         GSource* g_main_context_find_source_by_id(GMainContext* context, guint source_id);
132         GSource* g_main_context_find_source_by_user_data(GMainContext* context, gpointer user_data);
133         GSource* g_main_context_find_source_by_funcs_user_data(GMainContext* context, GSourceFuncs* funcs, gpointer user_data);
134         void g_main_context_wakeup(GMainContext* context);
135         gboolean g_main_context_acquire(GMainContext* context);
136         void g_main_context_release(GMainContext* context);
137         gboolean g_main_context_is_owner(GMainContext* context);
138         gboolean g_main_context_wait(GMainContext* context, GCond* cond, GMutex* mutex);
139         gboolean g_main_context_prepare(GMainContext* context, gint* priority);
140         gint g_main_context_query(GMainContext* context, gint max_priority, gint* timeout_, GPollFD* fds, gint n_fds);
141         gint g_main_context_check(GMainContext* context, gint max_priority, GPollFD* fds, gint n_fds);
142         void g_main_context_dispatch(GMainContext* context);
143         void g_main_context_set_poll_func(GMainContext* context, GPollFunc func);
144         GPollFunc g_main_context_get_poll_func(GMainContext* context);
145         void g_main_context_add_poll(GMainContext* context, GPollFD* fd, gint priority);
146         void g_main_context_remove_poll(GMainContext* context, GPollFD* fd);
147         gint g_main_depth();
148         GSource* g_main_current_source();
149         void g_main_context_push_thread_default(GMainContext* context);
150         void g_main_context_pop_thread_default(GMainContext* context);
151         GMainContext* g_main_context_get_thread_default();
152         GMainContext* g_main_context_ref_thread_default();
153         GMainLoop* g_main_loop_new(GMainContext* context, gboolean is_running);
154         void g_main_loop_run(GMainLoop* loop);
155         void g_main_loop_quit(GMainLoop* loop);
156         GMainLoop* g_main_loop_ref(GMainLoop* loop);
157         void g_main_loop_unref(GMainLoop* loop);
158         gboolean g_main_loop_is_running(GMainLoop* loop);
159         GMainContext* g_main_loop_get_context(GMainLoop* loop);
160         GSource* g_source_new(GSourceFuncs* source_funcs, guint struct_size);
161         GSource* g_source_ref(GSource* source);
162         void g_source_unref(GSource* source);
163         guint g_source_attach(GSource* source, GMainContext* context);
164         void g_source_destroy(GSource* source);
165         void g_source_set_priority(GSource* source, gint priority);
166         gint g_source_get_priority(GSource* source);
167         void g_source_set_can_recurse(GSource* source, gboolean can_recurse);
168         gboolean g_source_get_can_recurse(GSource* source);
169         guint g_source_get_id(GSource* source);
170         GMainContext* g_source_get_context(GSource* source);
171         void g_source_set_callback(GSource* source, GSourceFunc func, gpointer data, GDestroyNotify notify);
172         void g_source_set_funcs(GSource* source, GSourceFuncs* funcs);
173         gboolean g_source_is_destroyed(GSource* source);
174         void g_source_set_name(GSource* source, const(char)* name);
175         const(char)* g_source_get_name(GSource* source);
176         void g_source_set_name_by_id(guint tag, const(char)* name);
177         void g_source_set_callback_indirect(GSource* source, gpointer callback_data, GSourceCallbackFuncs* callback_funcs);
178         void g_source_add_poll(GSource* source, GPollFD* fd);
179         void g_source_remove_poll(GSource* source, GPollFD* fd);
180         void g_source_add_child_source(GSource* source, GSource* child_source);
181         void g_source_remove_child_source(GSource* source, GSource* child_source);
182         void g_source_get_current_time(GSource* source, GTimeVal* timeval);
183         gint64 g_source_get_time(GSource* source);
184         GSource* g_idle_source_new();
185         GSource* g_child_watch_source_new(GPid pid);
186         GSource* g_timeout_source_new(guint interval);
187         GSource* g_timeout_source_new_seconds(guint interval);
188         void g_get_current_time(GTimeVal* result);
189         gint64 g_get_monotonic_time();
190         gint64 g_get_real_time();
191         gboolean g_source_remove(guint tag);
192         gboolean g_source_remove_by_user_data(gpointer user_data);
193         gboolean g_source_remove_by_funcs_user_data(GSourceFuncs* funcs, gpointer user_data);
194         guint g_timeout_add_full(gint priority, guint interval, GSourceFunc function_, gpointer data, GDestroyNotify notify);
195         guint g_timeout_add(guint interval, GSourceFunc function_, gpointer data);
196         guint g_timeout_add_seconds_full(gint priority, guint interval, GSourceFunc function_, gpointer data, GDestroyNotify notify);
197         guint g_timeout_add_seconds(guint interval, GSourceFunc function_, gpointer data);
198         guint g_child_watch_add_full(gint priority, GPid pid, GChildWatchFunc function_, gpointer data, GDestroyNotify notify);
199         guint g_child_watch_add(GPid pid, GChildWatchFunc function_, gpointer data);
200         guint g_idle_add(GSourceFunc function_, gpointer data);
201         guint g_idle_add_full(gint priority, GSourceFunc function_, gpointer data, GDestroyNotify notify);
202         gboolean g_idle_remove_by_data(gpointer data);
203         void g_main_context_invoke_full(GMainContext* context, gint priority, GSourceFunc function_, gpointer data, GDestroyNotify notify);
204         void g_main_context_invoke(GMainContext* context, GSourceFunc function_, gpointer data);
205     }
206 }
207 else
208 {
209     extern( C ) nothrow 
210     {
211         alias da_g_main_context_new = GMainContext* function();																										
212         alias da_g_main_context_ref = GMainContext* function(GMainContext* context);																				
213         alias da_g_main_context_unref = void function(GMainContext* context);																						
214         alias da_g_main_context_default = GMainContext* function();																									
215         alias da_g_main_context_iteration = gboolean function(GMainContext* context, gboolean may_block);															
216         alias da_g_main_context_pending = gboolean function(GMainContext* context);																					
217         alias da_g_main_context_find_source_by_id = GSource* function(GMainContext* context, guint source_id);														
218         alias da_g_main_context_find_source_by_user_data = GSource* function(GMainContext* context, gpointer user_data);											
219         alias da_g_main_context_find_source_by_funcs_user_data = GSource* function(GMainContext* context, GSourceFuncs* funcs, gpointer user_data);					
220         alias da_g_main_context_wakeup = void function(GMainContext* context);																						
221         alias da_g_main_context_acquire = gboolean function(GMainContext* context);																					
222         alias da_g_main_context_release = void function(GMainContext* context);																						
223         alias da_g_main_context_is_owner = gboolean function(GMainContext* context);																				
224         alias da_g_main_context_wait = gboolean function(GMainContext* context, GCond* cond, GMutex* mutex);														
225         alias da_g_main_context_prepare = gboolean function(GMainContext* context, gint* priority);																	
226         alias da_g_main_context_query = gint function(GMainContext* context, gint max_priority, gint* timeout_, GPollFD* fds, gint n_fds);							
227         alias da_g_main_context_check = gint function(GMainContext* context, gint max_priority, GPollFD* fds, gint n_fds);											
228         alias da_g_main_context_dispatch = void function(GMainContext* context);																					
229         alias da_g_main_context_set_poll_func = void function(GMainContext* context, GPollFunc func);																
230         alias da_g_main_context_get_poll_func = GPollFunc function(GMainContext* context);																			
231         alias da_g_main_context_add_poll = void function(GMainContext* context, GPollFD* fd, gint priority);														
232         alias da_g_main_context_remove_poll = void function(GMainContext* context, GPollFD* fd);																	
233         alias da_g_main_depth = gint function();																													
234         alias da_g_main_current_source = GSource* function();																										
235         alias da_g_main_context_push_thread_default = void function(GMainContext* context);																			
236         alias da_g_main_context_pop_thread_default = void function(GMainContext* context);																			
237         alias da_g_main_context_get_thread_default = GMainContext* function();																						
238         alias da_g_main_context_ref_thread_default = GMainContext* function();																						
239         alias da_g_main_loop_new = GMainLoop* function(GMainContext* context, gboolean is_running);																	
240         alias da_g_main_loop_run = void function(GMainLoop* loop);																									
241         alias da_g_main_loop_quit = void function(GMainLoop* loop);																									
242         alias da_g_main_loop_ref = GMainLoop* function(GMainLoop* loop);																							
243         alias da_g_main_loop_unref = void function(GMainLoop* loop);																								
244         alias da_g_main_loop_is_running = gboolean function(GMainLoop* loop);																						
245         alias da_g_main_loop_get_context = GMainContext* function(GMainLoop* loop);																					
246         alias da_g_source_new = GSource* function(GSourceFuncs* source_funcs, guint struct_size);																	
247         alias da_g_source_ref = GSource* function(GSource* source);																									
248         alias da_g_source_unref = void function(GSource* source);																									
249         alias da_g_source_attach = guint function(GSource* source, GMainContext* context);																			
250         alias da_g_source_destroy = void function(GSource* source);																									
251         alias da_g_source_set_priority = void function(GSource* source, gint priority);																				
252         alias da_g_source_get_priority = gint function(GSource* source);																							
253         alias da_g_source_set_can_recurse = void function(GSource* source, gboolean can_recurse);																	
254         alias da_g_source_get_can_recurse = gboolean function(GSource* source);																						
255         alias da_g_source_get_id = guint function(GSource* source);																									
256         alias da_g_source_get_context = GMainContext* function(GSource* source);																					
257         alias da_g_source_set_callback = void function(GSource* source, GSourceFunc func, gpointer data, GDestroyNotify notify);									
258         alias da_g_source_set_funcs = void function(GSource* source, GSourceFuncs* funcs);																			
259         alias da_g_source_is_destroyed = gboolean function(GSource* source);																						
260         alias da_g_source_set_name = void function(GSource* source, const(char)* name);																				
261         alias da_g_source_get_name = const(char)* function(GSource* source);																						
262         alias da_g_source_set_name_by_id = void function(guint tag, const(char)* name);																				
263         alias da_g_source_set_callback_indirect = void function(GSource* source, gpointer callback_data, GSourceCallbackFuncs* callback_funcs);						
264         alias da_g_source_add_poll = void function(GSource* source, GPollFD* fd);																					
265         alias da_g_source_remove_poll = void function(GSource* source, GPollFD* fd);																				
266         alias da_g_source_add_child_source = void function(GSource* source, GSource* child_source);																	
267         alias da_g_source_remove_child_source = void function(GSource* source, GSource* child_source);																
268         alias da_g_source_get_current_time = void function(GSource* source, GTimeVal* timeval);																		
269         alias da_g_source_get_time = gint64 function(GSource* source);																								
270         alias da_g_idle_source_new = GSource* function();																											
271         alias da_g_child_watch_source_new = GSource* function(GPid pid);																							
272         alias da_g_timeout_source_new = GSource* function(guint interval);																							
273         alias da_g_timeout_source_new_seconds = GSource* function(guint interval);																					
274         alias da_g_get_current_time = void function(GTimeVal* result);																								
275         alias da_g_get_monotonic_time = gint64 function();																											
276         alias da_g_get_real_time = gint64 function();																												
277         alias da_g_source_remove = gboolean function(guint tag);																									
278         alias da_g_source_remove_by_user_data = gboolean function(gpointer user_data);																				
279         alias da_g_source_remove_by_funcs_user_data = gboolean function(GSourceFuncs* funcs, gpointer user_data);													
280         alias da_g_timeout_add_full = guint function(gint priority, guint interval, GSourceFunc function_, gpointer data, GDestroyNotify notify);					
281         alias da_g_timeout_add = guint function(guint interval, GSourceFunc function_, gpointer data);																
282         alias da_g_timeout_add_seconds_full = guint function(gint priority, guint interval, GSourceFunc function_, gpointer data, GDestroyNotify notify);			
283         alias da_g_timeout_add_seconds = guint function(guint interval, GSourceFunc function_, gpointer data);														
284         alias da_g_child_watch_add_full = guint function(gint priority, GPid pid, GChildWatchFunc function_, gpointer data, GDestroyNotify notify);					
285         alias da_g_child_watch_add = guint function(GPid pid, GChildWatchFunc function_, gpointer data);															
286         alias da_g_idle_add = guint function(GSourceFunc function_, gpointer data);																					
287         alias da_g_idle_add_full = guint function(gint priority, GSourceFunc function_, gpointer data, GDestroyNotify notify);										
288         alias da_g_idle_remove_by_data = gboolean function(gpointer data);																							
289         alias da_g_main_context_invoke_full = void function(GMainContext* context, gint priority, GSourceFunc function_, gpointer data, GDestroyNotify notify);		
290         alias da_g_main_context_invoke = void function(GMainContext* context, GSourceFunc function_, gpointer data);			
291     }
292 
293     __gshared
294     {
295         da_g_main_context_new g_main_context_new; 
296         da_g_main_context_ref g_main_context_ref; 
297         da_g_main_context_unref g_main_context_unref; 
298         da_g_main_context_default g_main_context_default; 
299         da_g_main_context_iteration g_main_context_iteration; 
300         da_g_main_context_pending g_main_context_pending; 
301         da_g_main_context_find_source_by_id g_main_context_find_source_by_id; 
302         da_g_main_context_find_source_by_user_data g_main_context_find_source_by_user_data; 
303         da_g_main_context_find_source_by_funcs_user_data g_main_context_find_source_by_funcs_user_data; 
304         da_g_main_context_wakeup g_main_context_wakeup; 
305         da_g_main_context_acquire g_main_context_acquire; 
306         da_g_main_context_release g_main_context_release; 
307         da_g_main_context_is_owner g_main_context_is_owner; 
308         da_g_main_context_wait g_main_context_wait; 
309         da_g_main_context_prepare g_main_context_prepare; 
310         da_g_main_context_query g_main_context_query; 
311         da_g_main_context_check g_main_context_check; 
312         da_g_main_context_dispatch g_main_context_dispatch; 
313         da_g_main_context_set_poll_func g_main_context_set_poll_func; 
314         da_g_main_context_get_poll_func g_main_context_get_poll_func; 
315         da_g_main_context_add_poll g_main_context_add_poll; 
316         da_g_main_context_remove_poll g_main_context_remove_poll; 
317         da_g_main_depth g_main_depth; 
318         da_g_main_current_source g_main_current_source; 
319         da_g_main_context_push_thread_default g_main_context_push_thread_default; 
320         da_g_main_context_pop_thread_default g_main_context_pop_thread_default; 
321         da_g_main_context_get_thread_default g_main_context_get_thread_default; 
322         da_g_main_context_ref_thread_default g_main_context_ref_thread_default; 
323         da_g_main_loop_new g_main_loop_new; 
324         da_g_main_loop_run g_main_loop_run; 
325         da_g_main_loop_quit g_main_loop_quit; 
326         da_g_main_loop_ref g_main_loop_ref; 
327         da_g_main_loop_unref g_main_loop_unref; 
328         da_g_main_loop_is_running g_main_loop_is_running; 
329         da_g_main_loop_get_context g_main_loop_get_context; 
330         da_g_source_new g_source_new; 
331         da_g_source_ref g_source_ref; 
332         da_g_source_unref g_source_unref; 
333         da_g_source_attach g_source_attach; 
334         da_g_source_destroy g_source_destroy; 
335         da_g_source_set_priority g_source_set_priority; 
336         da_g_source_get_priority g_source_get_priority; 
337         da_g_source_set_can_recurse g_source_set_can_recurse; 
338         da_g_source_get_can_recurse g_source_get_can_recurse; 
339         da_g_source_get_id g_source_get_id; 
340         da_g_source_get_context g_source_get_context; 
341         da_g_source_set_callback g_source_set_callback; 
342         da_g_source_set_funcs g_source_set_funcs; 
343         da_g_source_is_destroyed g_source_is_destroyed; 
344         da_g_source_set_name g_source_set_name; 
345         da_g_source_get_name g_source_get_name; 
346         da_g_source_set_name_by_id g_source_set_name_by_id; 
347         da_g_source_set_callback_indirect g_source_set_callback_indirect; 
348         da_g_source_add_poll g_source_add_poll; 
349         da_g_source_remove_poll g_source_remove_poll; 
350         da_g_source_add_child_source g_source_add_child_source; 
351         da_g_source_remove_child_source g_source_remove_child_source; 
352         da_g_source_get_current_time g_source_get_current_time; 
353         da_g_source_get_time g_source_get_time; 
354         da_g_idle_source_new g_idle_source_new; 
355         da_g_child_watch_source_new g_child_watch_source_new; 
356         da_g_timeout_source_new g_timeout_source_new; 
357         da_g_timeout_source_new_seconds g_timeout_source_new_seconds; 
358         da_g_get_current_time g_get_current_time; 
359         da_g_get_monotonic_time g_get_monotonic_time; 
360         da_g_get_real_time g_get_real_time; 
361         da_g_source_remove g_source_remove; 
362         da_g_source_remove_by_user_data g_source_remove_by_user_data; 
363         da_g_source_remove_by_funcs_user_data g_source_remove_by_funcs_user_data; 
364         da_g_timeout_add_full g_timeout_add_full; 
365         da_g_timeout_add g_timeout_add; 
366         da_g_timeout_add_seconds_full g_timeout_add_seconds_full; 
367         da_g_timeout_add_seconds g_timeout_add_seconds; 
368         da_g_child_watch_add_full g_child_watch_add_full; 
369         da_g_child_watch_add g_child_watch_add; 
370         da_g_idle_add g_idle_add; 
371         da_g_idle_add_full g_idle_add_full; 
372         da_g_idle_remove_by_data g_idle_remove_by_data; 
373         da_g_main_context_invoke_full g_main_context_invoke_full; 
374         da_g_main_context_invoke g_main_context_invoke; 	
375     }
376 }